package donkeykong;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JPanel;

public class Mazo extends JPanel implements Runnable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Image imagenMazo;
	
	private int posicionX;
	private int posicionY;

	private boolean activo;

	private Mario mario;

	private Clip clickClip;

	private AudioInputStream musicaSonido;

	public Mazo(int i, int j, Mario m) {
		try{
		mario = m;
		setPosicionX(i);
		setPosicionY(j);
		imagenMazo = ImageIO.read(new File("./images/mazo/mazo.png"));
		activo = true;
		}catch(Exception e){
			e.printStackTrace();
		}
	}


	/** Funcion paintComponent que es propia de los JPanels, que sirve para dibujar en el mismo la imagen que se quiera, entre otras opciones **/
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		/** Para hacer operaciones complejas con una imagen, crear un AffineTransform **/
		

		g2d.drawImage(imagenMazo,getPosicionX(),getPosicionY()-imagenMazo.getHeight(null),null);
		
			
		
		
	}
	
	
	@Override
	public void run() {
		try{
		while ( true ){
			if (!isActivo()){
				break;
			}
			if ((mario.getCentroMario() > getPosicionX()) & (mario.getCentroMario() < getPosicionX()+imagenMazo.getWidth(null))){
				if (( mario.getPosicion_y()-mario.getImage().getHeight(null) < getPosicionY() ) & ( mario.getPosicion_y() > getPosicionY() ) ){
					if (! mario.isInvencible()){
					//Mario ciclado con el mazo TITIRIRI TITITITITI TIRIRI
					Thread.sleep(101);
					escucharSonido("Hammer_Time",0);
					mario.Invencible();
					Usar();
					break;
					}
				}
			}
			Thread.sleep(1000);
			
		}

		
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	


	public int getPosicionX() {
		return posicionX;
	}


	public void setPosicionX(int posicionX) {
		this.posicionX = posicionX;
	}


	public int getPosicionY() {
		return posicionY;
	}


	public void setPosicionY(int posicionY) {
		this.posicionY = posicionY;
	}


	public boolean isActivo() {
		return activo;
	}

	public void Usar(){
		activo = false;
	}
	

	/** Funcion que permite reproducir un sonido
	 * 
	 * @param sonido : Nombre (sin extension) del sonido a reproducir
	 * @param duracion : Duracion de la musica por si qse quiere repetir indefinidamente o solo unas veces
	 */
	public void escucharSonido(String sonido, int duracion){
		try {
			clickClip = AudioSystem.getClip();
			musicaSonido = AudioSystem.getAudioInputStream(new File("./sounds/"+sonido+".wav"));
			clickClip.open(musicaSonido);
			clickClip.loop(duracion);
			clickClip.start();
		} catch (LineUnavailableException e) {
			e.printStackTrace();
		} catch (UnsupportedAudioFileException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	/** Funcion que se utiliza para parar el sonido, si esta activado **/
	public void pararSonido(){
		if(clickClip != null){
			clickClip.stop();
			clickClip.close();
		}
	}
	
	
	
}
